# -*- coding: utf-8 -*-
"""
@Time    : 2024/7/29 10:24 
@Author  : ZhangShenao 
@File    : 6.使用HTML标题分割器.py 
@Desc    : 使用HTMLHeaderTextSplitter标题分割器

HTMLHeaderTextSplitter会在HTML文档中按照元素级别进行分割
查找出每一块文本的内容与其所有关联的标题
并为每个相关的标题块提供元数据(顺序往上逐层查找,直到找到所有嵌套层级的标题)

Markdown文本也有类似的标题分割器,如MarkdownHeaderTextSplitter

"""
from langchain_text_splitters import HTMLHeaderTextSplitter

# 创建HTML文本
html_text = '''
<!DOCTYPE html>
<html>
<body>
    <div>
        <h1>标题1</h1>
        <p>关于标题1的一些介绍文本。</p>
        <div>
            <h2>子标题1</h2>
            <p>关于子标题1的一些介绍文本。</p>
            <h3>子子标题1</h3>
            <p>关于子子标题1的一些文本。</p>
            <h3>子子标题2</h3>
            <p>关于子子标题2的一些文本。</p>
        </div>
        <div>
            <h3>子标题2</h2>
            <p>关于子标题2的一些文本。</p>
        </div>
        <br>
        <p>关于标题1的一些结束文本。</p>
    </div>
</body>
</html>
'''

# 指定标题的分割规则
headers_to_split_on = [
    ('h1', 'Header-1'),
    ('h2', 'Header-2'),
    ('h3', 'Header-3'),
]

# 创建HTMLHeaderTextSplitter,并指定标题分割规则
splitter = HTMLHeaderTextSplitter(headers_to_split_on=headers_to_split_on)

# 使用HTMLHeaderTextSplitter分割HTML文本
chunks = splitter.split_text(html_text)
for chunk in chunks:
    print(f'page_content: {chunk.page_content}, metadata: {chunk.metadata}')
